package Chats
{
	import Chats.*;
	
	import com.bit101.components.Label;
	import com.bit101.components.TextArea;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import net.user1.reactor.Reactor;
	import net.user1.reactor.ReactorEvent;
	import com.bit101.components.PushButton;
	import com.bit101.components.InputText;
	import com.bit101.components.Style;
	
	/* サイズを465*465,フレームレートを30fps,背景色を白に設定する */
	[SWF(width = "465", height = "465", frameRate = "30", backgroundColor = "0x00FFFFFF")]
	
	public class Main extends Sprite 
	{
		private var _reactor:Reactor;
		private var _host:String	= CONFIG::UNION_HOST;
		private var _port:int		= CONFIG::UNION_PORT;
		
		private var _nameBox:InputText;
		
		/* メイン関数 */
		public function Main():void 
		{
			/* 初期化する */
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
			
		}
		
		/* 初期化関数 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// Reactor
			_reactor = new Reactor();
			_reactor.disableHTTPFailover();
			_reactor.addEventListener(ReactorEvent.READY, onConnect);
			_reactor.connect(_host, _port);
			
			/* com.bit101.componentsの初期設定 */
			/* 日本語フォントを有効にする */
			Style.embedFonts = false;
			/* フォントサイズを設定する */
			Style.fontSize = 12;
		}
		
		private function onConnect(e:ReactorEvent):void
		{
			trace("接続できたよ！");
			trace("ClientID:" + _reactor.self().getClientID());
			// @todo 各部屋の参加人数調べて表示したり？
			
			/* ロビー画面の描画 */
			DrawRobby();
		}
		
		/* ロビー画面の描画 */
		public function DrawRobby():void 
		{
			/* 全ての子コントロールを削除する */
			clearControls();
			
			/* 名前入力テキストボックスのラベル表示 */
			var label:Label = new Label(this, 5, 2);
			label.text = "名前";
			
			/* 名前入力テキストボックスの表示 */
			_nameBox = new InputText(this, 40, 2, "noname");
			_nameBox.maxChars = 8;
			_nameBox.setSize(80, 22);
			
			/* ルーム入室ボタンを表示 */
			for (var i:int = 1; i <= 3; i++) {
				var Button:PushButton;
				Button = new PushButton(this, 182, 220 + (i-1) * 60, "Room" + (i), inToChat);
				Button.tag = i;
				this.addChild(Button);
			}
			
		}
		
		/* チャットへの入室 */
		private function inToChat(event:MouseEvent = null):void
		{
			/* 全ての子コントロールを削除する */
			clearControls();
			
			/* ChatRoomクラス生成 */
			var chatno:int = event.currentTarget.tag;
			var name:String = _nameBox.text;
			this.addChild(new ChatRoom(this, chatno, name));
		}
		
		/* 全ての子コントロールを削除する */
		private function clearControls():void
		{
			while(this.numChildren > 0){
				this.removeChildAt(0);
			}
		}

		public function getReactor():Reactor
		{
			return _reactor;
		}
	}

}